﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

using ServiceDeskUNAB.Controlador;
using ServiceDeskUNAB.Modelo;

namespace ServiceDeskUNAB.Controlador
{
    class UsuarioControlador
    {
        private static UsuarioControlador instance;


        private UsuarioControlador()
        {           
        }

        public static UsuarioControlador Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new UsuarioControlador();
                }
                return instance;
            }
        }

        public bool Ingresar(Usuario u)
        {


            try
            {
                SqlCommand com = new SqlCommand();


                com.CommandText = "INSERT INTO Usuario" +
                    "(Username, Nombres_Usuario, ApellidoPaterno_Usuario, ApellidoMaterno_Usuario, Correo_Usuario, Password_Usuario)" + "VALUES" +
                    "(@Username, @Nombres_Usuario, @ApellidoPaterno_Usuario, @ApellidoMaterno_Usuario, @Correo_Usuario, @Password_Usuario)";

                //com.Parameters.AddWithValue("@ID_Usuario", u.IdUsuario);
                com.Parameters.AddWithValue("@Username", u.Username);
                com.Parameters.AddWithValue("@Nombres_Usuario", u.NombresUsuario);
                com.Parameters.AddWithValue("@ApellidoPaterno_Usuario", u.ApellidoPaternoUsuario);
                com.Parameters.AddWithValue("@ApellidoMaterno_Usuario", u.ApellidoMaternoUsuario);
                com.Parameters.AddWithValue("@Correo_Usuario", u.CorreoUsuario);
                com.Parameters.AddWithValue("@Password_Usuario", u.PasswordUsuario);


                com.Connection = Conexion.Instance.Con;
                SqlDataReader ejecutar = com.ExecuteReader();
                Conexion.Instance.Con.Close();
                return true;
            }
            catch (Exception e)
            {
                Conexion.Instance.Con.Close();
                Console.WriteLine(e.Message);
                return false;
                throw;
            }

        }
        public bool Modificar(int ID_Usuario, string Username, string Nombres_Usuario, string ApellidoPaterno_Usuario, string ApellidoMaterno_Usuario, string Correo_Usuario, string Password_Usuario)
        {
            try
            {
                SqlCommand com = new SqlCommand();


                com.CommandText = "UPDATE Usuario " +
                    "SET Username = @Username, Nombres_Usuario = @Nombres_Usuario, ApellidoPaterno_Usuario = @ApellidoPaterno_Usuario, ApellidoMaterno_Usuario = @ApellidoMaterno_Usuario, Correo_Usuario = @Correo_Usuario, Password_Usuario = @Password_Usuario" +
                    "WHERE ID_Usuario = @Id_Usuario";
            


                com.Parameters.AddWithValue("@ID_Usuario", ID_Usuario);
                com.Parameters.AddWithValue("@Username", Username);
                com.Parameters.AddWithValue("@Nombres_Usuario", Nombres_Usuario);
                com.Parameters.AddWithValue("@ApellidoPaterno_Usuario", ApellidoPaterno_Usuario);
                com.Parameters.AddWithValue("@ApellidoMaterno_Usuario", ApellidoMaterno_Usuario);
                com.Parameters.AddWithValue("@Correo_Usuario", Correo_Usuario);
                com.Parameters.AddWithValue("@Password_Usuario", Password_Usuario);

                com.Connection = Conexion.Instance.Con;
                SqlDataReader ejecutar = com.ExecuteReader();
                // TODO terminar esto

                Conexion.Instance.Con.Close();
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Conexion.Instance.Con.Close();
                return false;
                throw;
            }
        }
        public bool Eliminar(int ID_Usuario)
        {
            bool resultado = false;
            try
            {
                SqlCommand com = new SqlCommand("DELETE FROM Usuario WHERE ID_Usuario = '" + ID_Usuario + "')");
                SqlDataReader ejecutar = com.ExecuteReader();
                if (ejecutar.Read())
                {
                    resultado = true;
                }
                Conexion.Instance.Con.Close();
                return resultado;
            }
            catch (Exception)
            {
                Conexion.Instance.Con.Close();
                return resultado;
                throw;
            }
        }
        public bool Logear(string username, string password)
        {
            try
            {
                SqlConnection con = new SqlConnection(Conexion.connectionString);
                SqlCommand com = new SqlCommand();
                con.Open();

                com.CommandText = "select * from USUARIO where USERNAME='" + username + "' and PASSWORD_USUARIO='" + password + "'";
                com.Connection = con;

                SqlDataReader ejecuta = com.ExecuteReader();

                if (ejecuta.Read() == true)
                {
                    Conexion.Instance.SesionID = (int)(ejecuta["ID_USUARIO"]);
                    Conexion.Instance.SesionUsername = username;
                    con.Close();
                    return true;
                }
                else
                {
                    con.Close();
                    return false;
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                //con.Close();
                return false;
                throw;
            }
        }

    }
}
